(add-hook) Added optional arg to cause hook to be appended rather than
authorEric S. Raymond <esr@snark.thyrsus.com>
Sat, 27 Mar 1993 01:58:44 +0000 (01:58 +0000)
committerEric S. Raymond <esr@snark.thyrsus.com>
Sat, 27 Mar 1993 01:58:44 +0000 (01:58 +0000)
prepended to the hook list.  This obviates the 23 different hook-bashing
packages in LCD.

(get-word) Added.  Lots of help and default-generator functions in LCD use
it, and it's remarkably difficult to get right, especially given the new
syntax primitives.

lisp/subr.el

index 464fea25f9ca97728805d275bccd312ff04d3b03..e6ec3b3b613ededec562dc17f521ef8dff892a4c 100644 (file)
@@ -407,11 +407,12 @@ If it is a list, the elements are called, in order, with no arguments."
   "Variable by which C primitives find the function `run-hooks'.
 Don't change it.")
 
-(defun add-hook (hook function)
-  "Add to the value of HOOK the function FUNCTION unless already present.
-HOOK should be a symbol, and FUNCTION may be any valid function.
-HOOK's value should be a list of functions, not a single function.
-If HOOK is void, it is first set to nil."
+(defun add-hook (hook function &optional append)
+  "Add to the value of HOOK the function FUNCTION unless already present (it
+becomes the first hook on the list unless optional APPEND is non-nil, in
+which case it becomes the last).  HOOK should be a symbol, and FUNCTION may be
+any valid function.  HOOK's value should be a list of functions, not a single
+function.  If HOOK is void, it is first set to nil."
   (or (boundp hook) (set hook nil))
   (or (if (consp function)
          ;; Clever way to tell whether a given lambda-expression
@@ -419,7 +420,10 @@ If HOOK is void, it is first set to nil."
          (let ((tail (assoc (cdr function) (symbol-value hook))))
            (equal function tail))
        (memq function (symbol-value hook)))
-      (set hook (cons function (symbol-value hook)))))
+      (set hook 
+          (if append
+              (nconc (symbol-value hook) (list function))
+            (cons function (symbol-value hook))))))
 \f
 (defun momentary-string-display (string pos &optional exit-char message) 
   "Momentarily display STRING in the buffer at POS.